# 字典数据类型 是可变数据类型 无序 无序列根据 key值找
# 字典类型是根据一个信息查找另一个信息，键值对。她表示索引的键值和对应的值构成对应关系
# 案例： d = {key1:value1,key2:value2}
import random

d = {10: 'one', 20: 'two', 30: 'three', 10: 'four', 20: 'five', 30: 'six'}
print(d)
# zip函数构建 客将连个数组合并
lst = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
lst1 = ['cat', 'dog', 'elephant']
zipobj = zip(lst, lst1)
print(zipobj)
# 将映射对象转换成列表对象
# print(list(zipobj))
do = dict(zipobj)
print(do)
# 使用参数创建
d = dict(cat='dog', dog='elephant')
print(d)

t = ('cat', 'dog', 'elephant')
print({t: t})

lst = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
print({'lst': lst})

# 字典可用的函数
print('max', max(t))
print('min', min(t))
print('length', len(t))
print('index', t.index('elephant'))

# 删除不可用
del t
# print(t)

# 字典的访问和便利
d = {'cat': 'dog', 'dog': 'elephant'}
# 通过索引序列方式访问
print(d['dog'])
# 通过get(key) 方式访问
print(d.get('cat'))
# 两者有区别，可以不存在的情况下。d[key] 会报错 get(key)不会报错

# 字典便利
# 在使用for循环时，分别获取key，value
for k, v in d.items():
    print(k, v, end="\n")

# 字典的相关操作和方法
d = {1: 'dog', 2: 'elephant', 3: 'tomcat'}
print(d)

# 向字典中添加元素
# 通过赋值方式给元素添加元素
d[4] = '马迪迪'
print(d)

# 获取字典中所有值
keys = d.keys()
values = d.values()
print(keys, '\n', values)
print(list(keys), '\n', tuple(keys))

# 元组：如何将字典中的数据转成key-value形式，以元组的形式存在
lst = list(d.items())
print(lst)

# 转元组函数
d = dict(lst)

# 使用pop函数
print(d.pop(2))
print(d)
print(d.pop(10, '不存在'))

# 随机删除
print(d.popitem())
print(d)

print(bool(d))

# 清空字典中所有的元素
d.clear()
print(d)

# python中一切皆对象
print(bool(d))

# 字典生成式
d = {index * item: random.randint(1, 999) for index, item in enumerate(range(10), start=5)}
print(d)

# 创建两个列表
lst = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
lst2 = ['cat', 'dog', 'elephant']

d = {key: val for key, val in zip(lst, lst2)}
print(d)
try:
    print(10 / 0)
except ZeroDivisionError:
    print('除数不能为0')
except BaseException:
    print('未知异常')

